﻿/******************************************************************************
 * Name         : Client.hpp
 * Author       : 671643387
 * Date         : 2015年9月11日
 * Description  :
 *****************************************************************************/

#ifndef PINGPONG_CLIENT_HPP_
#define PINGPONG_CLIENT_HPP_

#include <boost/scoped_array.hpp>
#include <boost/shared_ptr.hpp>
class Client;
typedef boost::shared_ptr<Client> ClientPtr;
typedef boost::scoped_array<char> CharBuffer;

class Client : public dev::net::SocketEventHandler
{
public:
    enum Status
    {
        READY,
        RUNNING,
        EXITING,
        EXIT
    };
public:
    Client(int id, dev::net::EventLoop& eventLoop);
    ~Client(void);

    bool open(void);
    void close(void);
    void shutdown(void);

    int getId(void) const { return id_; }

public:
    virtual void handleInput(void);
    virtual void handleOutput(void);
    virtual void handleException(void);
    virtual void handleClose(void);
    virtual void handleHeartBeat(void);

private:
    void doSend(const char* buff, size_t len);

private:
    int id_;
    dev::net::Socket sock_;
    bool firstSend;
    Status status_;
    CharBuffer buffer_;

    dev::net::EventLoop& eventLoop_;
};

#endif /* PINGPONG_CLIENT_HPP_ */
